package com.aaa.forum.services;

import com.aaa.forum.model.Bookmark;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface IBookmarkService {

    /**
     * 收藏帖子
     *
     * @param userId        用户id
     * @param articleId     帖子id
     */
    @Transactional
    void mark(Long userId, Long articleId);

    /**
     * 取消收藏
     *
     * @param userId        用户id
     * @param articleId     帖子id
     */
    @Transactional
    void cancel(Long userId, Long articleId);

    /**
     * 取消收藏
     *
     * @param id    收藏id
     */
    @Transactional
    void cancelById(Long id);

    /**
     * 根据id获取收藏记录
     * @param id    收藏id
     */
    Bookmark selectById(Long id);

    /**
     * 查询收藏夹中所有的帖子
     *
     * @param collectionId  收藏夹id
     * @return              帖子列表
     */
    List<Bookmark> selectAllByCollectionId(Long collectionId);

    /**
     * 修改收藏内容所属的收藏夹
     *
     * @param id            收藏id
     * @param collectionId  收藏夹id
     */
    void modifyCollectionId(Long id, Long collectionId);

    /**
     * 删除收藏夹时，同时删除该收藏夹下，所有的收藏记录
     *
     * @param collectionId  收藏夹id
     */
    void deleteByCollection(Long collectionId);


    /**
     * 获取收藏状态
     * @param userId        用户id
     * @param articleId     帖子id
     */
    Byte getState(Long userId, Long articleId);

    /**
     * 根据收藏夹id，将该收藏夹中的内容全部移动到默认收藏夹中
     * @param collectionId  收藏夹id
     */
    int moveToDefault(Long collectionId);

    /**
     * 获取收藏夹中收藏的数量
     * @param collectionId  收藏夹id
     */
    int getCountByCollectionId(Long collectionId);
}
